package simple.string;

import java.util.HashMap;
import java.util.Map;

/**
 * <a href="https://leetcode.cn/problems/reformat-date/">1507. 转变日期格式</a>
 * 给你一个字符串 date ，它的格式为 Day Month Year ，其中：
 *   Day 是集合 {"1st", "2nd", "3rd", "4th", ..., "30th", "31st"} 中的一个元素。
 *   Month 是集合 {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} 中的一个元素。
 *   Year 的范围在 [1900, 2100] 之间。
 * 请你将字符串转变为 YYYY-MM-DD 的格式，其中：
 *   YYYY 表示 4 位的年份。
 *   MM 表示 2 位的月份。
 *   DD 表示 2 位的天数。
 * 示例 1：
 *   输入：date = "20th Oct 2052"
 *   输出："2052-10-20"
 * 示例 2：
 *   输入：date = "6th Jun 1933"
 *   输出："1933-06-06"
 * 示例 3：
 *   输入：date = "26th May 1960"
 *   输出："1960-05-26"
 * 提示：
 *   给定日期保证是合法的，所以不需要处理异常输入。
 * @author 刘学松
 * @date 2023-08-11 10:22
 */
public class 转变日期格式 {
    public String reformatDate(String date) {
        Map<String, String> map = new HashMap<>() {{
            put("Jan","01");put("Feb","02");put("Mar","03");put("Apr","04");
            put("May","05");put("Jun","06");put("Jul","07");put("Aug","08");
            put("Sep","09");put("Oct","10");put("Nov","11");put("Dec","12");
        }};
        StringBuilder sb = new StringBuilder(date.substring(date.length() - 4)).append("-");
        for (int i = 0; i < 5; i++) {
            if (date.charAt(i) == ' ') {
                String month = date.substring(i + 1, date.length() - 5);
                sb.append(map.get(month)).append("-");
                String day = date.substring(0, i-2);
                sb.append(day.length() == 1 ? ("0" + day) : day);
                break;
            }
        }
        return sb.toString();
    }
}
